[Coding041] LeetCode 20

Valid Parentheses

Ben 2024.04.09

More coding records

Get the knowledge flowing and circulating! :)

目录

本题收获

  • switch的用法;

  • 对于栈的操作,如果想要出栈,则需要先判断栈是否为空。如果栈是空的,则stack.pop(); stack.peek();都是会报错的。

心得:一开始在看这道题的时候,时隔很久了。突然间竟然没了思路。后来慢慢调试,写出了代码1.

就代码2~4而言,都是之前自己写过的,却未曾想到现在竟然都不记得了!

所以说啊,编程这东西,同一道题(哪怕像本题是easy),依然值得反复再看、再编,直到把思路融汇贯通。

看着自己的代码1,显得十分生涩。但是最终调试成功,也是值得开心的。

本题收获还是比较大的。比如这个用栈来实现括号匹配的思路:

普通思路

  1. 首先对于左一半,都要入栈;

  2. 对于由一半,都要比较:如果和上一个入栈的匹配了,例如上一个入栈的是{,而当前是},则证明可以把上一个刚刚入栈的{给弹出来,继而继续处理下一个字符;

  3. 要知道,不管怎样入栈和出栈,都会遇到这样的情况:({[]})[] or ([{}]),即,总有两个字符刚好是左右匹配的括号;这样的话,就可以遇到匹配的,就弹出,最后留下空栈。

好思路

  1. 看到左括号({[,则对应入栈右括号)}]

  2. 如果看到了右括号,则出栈,看看是否当前处理的字符和栈顶是一样的

    • 不一样,则一定是false了;

题目:20. Valid Parentheses

Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.

  2. Open brackets must be closed in the correct order.

  3. Every close bracket has a corresponding open bracket of the same type.

Example 1:

Example 2:

Example 3:

Constraints:


代码1(配 · 手绘过程图)

复杂度分析

image-20240409124631558


代码2


代码3(配 · 手绘过程图)

image-20240409162214252


代码4(配 · 手绘过程图)

思路:使用数组来代替栈!

image-20240409162313316


测试样例

 

知识点积累 (Java)

运行结果:

image-20240409164240882

运行结果:

image-20240409164628951

运行结果:

image-20240409164521799